package pl.wroc.pwr.psi.service;

import java.util.Collection;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pl.wroc.pwr.psi.entity.SlowoKluczowe;
import pl.wroc.pwr.psi.entity.Synonim;
import pl.wroc.pwr.psi.repository.SlowoKluczoweRepository;
import pl.wroc.pwr.psi.repository.SynonimRepository;

/**
 * 
 * @author wposlednicka
 *
 */
@Service
public class DefinicjaSynonimowService {

	@Autowired
	private SlowoKluczoweRepository slowoKluczoweRepository;
	
	@Autowired
	private SynonimRepository synonimRepository;
	
	public SlowoKluczowe findSlowoKluczoweById(Integer id){
		return slowoKluczoweRepository.findOne(id);
	}
	
	public List<SlowoKluczowe> findAllSlowoKluczowe() {
		return slowoKluczoweRepository.findAll();
	}
	
	public Integer utworzNoweSlowoKluczowe(String nazwa, List<String> synonimy) {
		SlowoKluczowe slowoKluczowe = new SlowoKluczowe();
		slowoKluczowe.setNazwa(nazwa);
		SlowoKluczowe save = slowoKluczoweRepository.save(slowoKluczowe);
		
		for (String synonimStr : synonimy) {
			Synonim synonim = new Synonim();
			synonim.setSynonim(synonimStr);
			synonim.setSlowoKluczowe(slowoKluczowe);
			saveSynonim(synonim);
		}
		
		return save.getId();
	}
	
	public void deleteSlowoKluczoweById(Integer id){
		slowoKluczoweRepository.delete(id);
	}

	public Collection<SlowoKluczowe> findSlowaKluczowe() {
		return slowoKluczoweRepository.findAll();
	}

	public Integer saveSynonim(Synonim synonim) {
		Synonim save = synonimRepository.save(synonim);
		return save.getId();
	}

	public boolean istniejeSlowoKluczowe(String sk) {
		List<SlowoKluczowe> allSKs = slowoKluczoweRepository.findAll();
		for (SlowoKluczowe slowoKluczowe : allSKs) {
			if(sk.equals(slowoKluczowe.getNazwa())) {
				return true;
			}
		}
		return false;
	}
	
	public void updateSlowoKluczowe(SlowoKluczowe sk) {
		slowoKluczoweRepository.saveAndFlush(sk);
	}

	public void zmienNazweSlowoKluczowe(Integer skId, String nowaNazwa) {
		SlowoKluczowe sk = slowoKluczoweRepository.findOne(skId);
		sk.setNazwa(nowaNazwa);
		slowoKluczoweRepository.save(sk);		
	}
	
}
